1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module pango.c.types;
26 
27 public import cairo.c.types;
28 public import glib.c.types;
29 public import gobject.c.types;
30 public import harfbuzz.c.types;
31 
32 alias void* FTLibrary;
33 
34 /**
35  * A `PangoGlyph` represents a single glyph in the output form of a string.
36  */
37 public alias uint PangoGlyph;
38 
39 /**
40  * The `PangoGlyphUnit` type is used to store dimensions within
41  * Pango.
42  *
43  * Dimensions are stored in 1/PANGO_SCALE of a device unit.
44  * (A device unit might be a pixel for screen display, or
45  * a point on a printer.) PANGO_SCALE is currently 1024, and
46  * may change in the future (unlikely though), but you should not
47  * depend on its exact value.
48  *
49  * The PANGO_PIXELS() macro can be used to convert from glyph units
50  * into device units with correct rounding.
51  */
52 public alias int PangoGlyphUnit;
53 
54 /**
55  * A `PangoLayoutRun` represents a single run within a `PangoLayoutLine`.
56  *
57  * It is simply an alternate name for [struct@Pango.GlyphItem].
58  * See the [struct@Pango.GlyphItem] docs for details on the fields.
59  */
60 public alias PangoGlyphItem PangoLayoutRun;
61 
62 /**
63  * `PangoAlignment` describes how to align the lines of a `PangoLayout`
64  * within the available space.
65  *
66  * If the `PangoLayout` is set to justify using [method@Pango.Layout.set_justify],
67  * this only affects partial lines.
68  *
69  * See [method@Pango.Layout.set_auto_dir] for how text direction affects
70  * the interpretation of `PangoAlignment` values.
71  */
72 public enum PangoAlignment
73 {
74 	/**
75 	 * Put all available space on the right
76 	 */
77 	LEFT = 0,
78 	/**
79 	 * Center the line within the available space
80 	 */
81 	CENTER = 1,
82 	/**
83 	 * Put all available space on the left
84 	 */
85 	RIGHT = 2,
86 }
87 
88 /**
89  * The `PangoAttrType` distinguishes between different types of attributes.
90  *
91  * Along with the predefined values, it is possible to allocate additional
92  * values for custom attributes using [func@AttrType.register]. The predefined
93  * values are given below. The type of structure used to store the attribute is
94  * listed in parentheses after the description.
95  */
96 public enum PangoAttrType
97 {
98 	/**
99 	 * does not happen
100 	 */
101 	INVALID = 0,
102 	/**
103 	 * language ([struct@Pango.AttrLanguage])
104 	 */
105 	LANGUAGE = 1,
106 	/**
107 	 * font family name list ([struct@Pango.AttrString])
108 	 */
109 	FAMILY = 2,
110 	/**
111 	 * font slant style ([struct@Pango.AttrInt])
112 	 */
113 	STYLE = 3,
114 	/**
115 	 * font weight ([struct@Pango.AttrInt])
116 	 */
117 	WEIGHT = 4,
118 	/**
119 	 * font variant (normal or small caps) ([struct@Pango.AttrInt])
120 	 */
121 	VARIANT = 5,
122 	/**
123 	 * font stretch ([struct@Pango.AttrInt])
124 	 */
125 	STRETCH = 6,
126 	/**
127 	 * font size in points scaled by %PANGO_SCALE ([struct@Pango.AttrInt])
128 	 */
129 	SIZE = 7,
130 	/**
131 	 * font description ([struct@Pango.AttrFontDesc])
132 	 */
133 	FONT_DESC = 8,
134 	/**
135 	 * foreground color ([struct@Pango.AttrColor])
136 	 */
137 	FOREGROUND = 9,
138 	/**
139 	 * background color ([struct@Pango.AttrColor])
140 	 */
141 	BACKGROUND = 10,
142 	/**
143 	 * whether the text has an underline ([struct@Pango.AttrInt])
144 	 */
145 	UNDERLINE = 11,
146 	/**
147 	 * whether the text is struck-through ([struct@Pango.AttrInt])
148 	 */
149 	STRIKETHROUGH = 12,
150 	/**
151 	 * baseline displacement ([struct@Pango.AttrInt])
152 	 */
153 	RISE = 13,
154 	/**
155 	 * shape ([struct@Pango.AttrShape])
156 	 */
157 	SHAPE = 14,
158 	/**
159 	 * font size scale factor ([struct@Pango.AttrFloat])
160 	 */
161 	SCALE = 15,
162 	/**
163 	 * whether fallback is enabled ([struct@Pango.AttrInt])
164 	 */
165 	FALLBACK = 16,
166 	/**
167 	 * letter spacing ([struct@PangoAttrInt])
168 	 */
169 	LETTER_SPACING = 17,
170 	/**
171 	 * underline color ([struct@Pango.AttrColor])
172 	 */
173 	UNDERLINE_COLOR = 18,
174 	/**
175 	 * strikethrough color ([struct@Pango.AttrColor])
176 	 */
177 	STRIKETHROUGH_COLOR = 19,
178 	/**
179 	 * font size in pixels scaled by %PANGO_SCALE ([struct@Pango.AttrInt])
180 	 */
181 	ABSOLUTE_SIZE = 20,
182 	/**
183 	 * base text gravity ([struct@Pango.AttrInt])
184 	 */
185 	GRAVITY = 21,
186 	/**
187 	 * gravity hint ([struct@Pango.AttrInt])
188 	 */
189 	GRAVITY_HINT = 22,
190 	/**
191 	 * OpenType font features ([struct@Pango.AttrFontFeatures]). Since 1.38
192 	 */
193 	FONT_FEATURES = 23,
194 	/**
195 	 * foreground alpha ([struct@Pango.AttrInt]). Since 1.38
196 	 */
197 	FOREGROUND_ALPHA = 24,
198 	/**
199 	 * background alpha ([struct@Pango.AttrInt]). Since 1.38
200 	 */
201 	BACKGROUND_ALPHA = 25,
202 	/**
203 	 * whether breaks are allowed ([struct@Pango.AttrInt]). Since 1.44
204 	 */
205 	ALLOW_BREAKS = 26,
206 	/**
207 	 * how to render invisible characters ([struct@Pango.AttrInt]). Since 1.44
208 	 */
209 	SHOW = 27,
210 	/**
211 	 * whether to insert hyphens at intra-word line breaks ([struct@Pango.AttrInt]). Since 1.44
212 	 */
213 	INSERT_HYPHENS = 28,
214 	/**
215 	 * whether the text has an overline ([struct@Pango.AttrInt]). Since 1.46
216 	 */
217 	OVERLINE = 29,
218 	/**
219 	 * overline color ([struct@Pango.AttrColor]). Since 1.46
220 	 */
221 	OVERLINE_COLOR = 30,
222 	/**
223 	 * line height factor ([struct@Pango.AttrFloat]). Since: 1.50
224 	 */
225 	LINE_HEIGHT = 31,
226 	/**
227 	 * line height ([struct@Pango.AttrInt]). Since: 1.50
228 	 */
229 	ABSOLUTE_LINE_HEIGHT = 32,
230 	TEXT_TRANSFORM = 33,
231 	/**
232 	 * override segmentation to classify the range of the attribute as a single word ([struct@Pango.AttrInt]). Since 1.50
233 	 */
234 	WORD = 34,
235 	/**
236 	 * override segmentation to classify the range of the attribute as a single sentence ([struct@Pango.AttrInt]). Since 1.50
237 	 */
238 	SENTENCE = 35,
239 	/**
240 	 * baseline displacement ([struct@Pango.AttrInt]). Since 1.50
241 	 */
242 	BASELINE_SHIFT = 36,
243 	/**
244 	 * font-relative size change ([struct@Pango.AttrInt]). Since 1.50
245 	 */
246 	FONT_SCALE = 37,
247 }
248 
249 /**
250  * An enumeration that affects baseline shifts between runs.
251  *
252  * Since: 1.50
253  */
254 public enum PangoBaselineShift
255 {
256 	/**
257 	 * Leave the baseline unchanged
258 	 */
259 	NONE = 0,
260 	/**
261 	 * Shift the baseline to the superscript position,
262 	 * relative to the previous run
263 	 */
264 	SUPERSCRIPT = 1,
265 	/**
266 	 * Shift the baseline to the subscript position,
267 	 * relative to the previous run
268 	 */
269 	SUBSCRIPT = 2,
270 }
271 
272 /**
273  * `PangoBidiType` represents the bidirectional character
274  * type of a Unicode character.
275  *
276  * The values in this enumeration are specified by the
277  * [Unicode bidirectional algorithm](http://www.unicode.org/reports/tr9/).
278  *
279  * Deprecated: Use fribidi for this information
280  *
281  * Since: 1.22
282  */
283 public enum PangoBidiType
284 {
285 	/**
286 	 * Left-to-Right
287 	 */
288 	L = 0,
289 	/**
290 	 * Left-to-Right Embedding
291 	 */
292 	LRE = 1,
293 	/**
294 	 * Left-to-Right Override
295 	 */
296 	LRO = 2,
297 	/**
298 	 * Right-to-Left
299 	 */
300 	R = 3,
301 	/**
302 	 * Right-to-Left Arabic
303 	 */
304 	AL = 4,
305 	/**
306 	 * Right-to-Left Embedding
307 	 */
308 	RLE = 5,
309 	/**
310 	 * Right-to-Left Override
311 	 */
312 	RLO = 6,
313 	/**
314 	 * Pop Directional Format
315 	 */
316 	PDF = 7,
317 	/**
318 	 * European Number
319 	 */
320 	EN = 8,
321 	/**
322 	 * European Number Separator
323 	 */
324 	ES = 9,
325 	/**
326 	 * European Number Terminator
327 	 */
328 	ET = 10,
329 	/**
330 	 * Arabic Number
331 	 */
332 	AN = 11,
333 	/**
334 	 * Common Number Separator
335 	 */
336 	CS = 12,
337 	/**
338 	 * Nonspacing Mark
339 	 */
340 	NSM = 13,
341 	/**
342 	 * Boundary Neutral
343 	 */
344 	BN = 14,
345 	/**
346 	 * Paragraph Separator
347 	 */
348 	B = 15,
349 	/**
350 	 * Segment Separator
351 	 */
352 	S = 16,
353 	/**
354 	 * Whitespace
355 	 */
356 	WS = 17,
357 	/**
358 	 * Other Neutrals
359 	 */
360 	ON = 18,
361 	/**
362 	 * Left-to-Right isolate. Since 1.48.6
363 	 */
364 	LRI = 19,
365 	/**
366 	 * Right-to-Left isolate. Since 1.48.6
367 	 */
368 	RLI = 20,
369 	/**
370 	 * First strong isolate. Since 1.48.6
371 	 */
372 	FSI = 21,
373 	/**
374 	 * Pop directional isolate. Since 1.48.6
375 	 */
376 	PDI = 22,
377 }
378 
379 /**
380  * `PangoCoverageLevel` is used to indicate how well a font can
381  * represent a particular Unicode character for a particular script.
382  *
383  * Since 1.44, only %PANGO_COVERAGE_NONE and %PANGO_COVERAGE_EXACT
384  * will be returned.
385  */
386 public enum PangoCoverageLevel
387 {
388 	/**
389 	 * The character is not representable with
390 	 * the font.
391 	 */
392 	NONE = 0,
393 	/**
394 	 * The character is represented in a
395 	 * way that may be comprehensible but is not the correct
396 	 * graphical form. For instance, a Hangul character represented
397 	 * as a a sequence of Jamos, or a Latin transliteration of a
398 	 * Cyrillic word.
399 	 */
400 	FALLBACK = 1,
401 	/**
402 	 * The character is represented as
403 	 * basically the correct graphical form, but with a stylistic
404 	 * variant inappropriate for the current script.
405 	 */
406 	APPROXIMATE = 2,
407 	/**
408 	 * The character is represented as the
409 	 * correct graphical form.
410 	 */
411 	EXACT = 3,
412 }
413 
414 /**
415  * `PangoDirection` represents a direction in the Unicode bidirectional
416  * algorithm.
417  *
418  * Not every value in this enumeration makes sense for every usage of
419  * `PangoDirection`; for example, the return value of [func@unichar_direction]
420  * and [func@find_base_dir] cannot be `PANGO_DIRECTION_WEAK_LTR` or
421  * `PANGO_DIRECTION_WEAK_RTL`, since every character is either neutral
422  * or has a strong direction; on the other hand `PANGO_DIRECTION_NEUTRAL`
423  * doesn't make sense to pass to [func@itemize_with_base_dir].
424  *
425  * The `PANGO_DIRECTION_TTB_LTR`, `PANGO_DIRECTION_TTB_RTL` values come from
426  * an earlier interpretation of this enumeration as the writing direction
427  * of a block of text and are no longer used. See `PangoGravity` for how
428  * vertical text is handled in Pango.
429  *
430  * If you are interested in text direction, you should really use fribidi
431  * directly. `PangoDirection` is only retained because it is used in some
432  * public apis.
433  */
434 public enum PangoDirection
435 {
436 	/**
437 	 * A strong left-to-right direction
438 	 */
439 	LTR = 0,
440 	/**
441 	 * A strong right-to-left direction
442 	 */
443 	RTL = 1,
444 	/**
445 	 * Deprecated value; treated the
446 	 * same as `PANGO_DIRECTION_RTL`.
447 	 */
448 	TTB_LTR = 2,
449 	/**
450 	 * Deprecated value; treated the
451 	 * same as `PANGO_DIRECTION_LTR`
452 	 */
453 	TTB_RTL = 3,
454 	/**
455 	 * A weak left-to-right direction
456 	 */
457 	WEAK_LTR = 4,
458 	/**
459 	 * A weak right-to-left direction
460 	 */
461 	WEAK_RTL = 5,
462 	/**
463 	 * No direction specified
464 	 */
465 	NEUTRAL = 6,
466 }
467 
468 /**
469  * `PangoEllipsizeMode` describes what sort of ellipsization
470  * should be applied to text.
471  *
472  * In the ellipsization process characters are removed from the
473  * text in order to make it fit to a given width and replaced
474  * with an ellipsis.
475  */
476 public enum PangoEllipsizeMode
477 {
478 	/**
479 	 * No ellipsization
480 	 */
481 	NONE = 0,
482 	/**
483 	 * Omit characters at the start of the text
484 	 */
485 	START = 1,
486 	/**
487 	 * Omit characters in the middle of the text
488 	 */
489 	MIDDLE = 2,
490 	/**
491 	 * Omit characters at the end of the text
492 	 */
493 	END = 3,
494 }
495 
496 /**
497  * The bits in a `PangoFontMask` correspond to the set fields in a
498  * `PangoFontDescription`.
499  */
500 public enum PangoFontMask
501 {
502 	/**
503 	 * the font family is specified.
504 	 */
505 	FAMILY = 1,
506 	/**
507 	 * the font style is specified.
508 	 */
509 	STYLE = 2,
510 	/**
511 	 * the font variant is specified.
512 	 */
513 	VARIANT = 4,
514 	/**
515 	 * the font weight is specified.
516 	 */
517 	WEIGHT = 8,
518 	/**
519 	 * the font stretch is specified.
520 	 */
521 	STRETCH = 16,
522 	/**
523 	 * the font size is specified.
524 	 */
525 	SIZE = 32,
526 	/**
527 	 * the font gravity is specified (Since: 1.16.)
528 	 */
529 	GRAVITY = 64,
530 	/**
531 	 * OpenType font variations are specified (Since: 1.42)
532 	 */
533 	VARIATIONS = 128,
534 }
535 
536 /**
537  * An enumeration that affects font sizes for superscript
538  * and subscript positioning and for (emulated) Small Caps.
539  *
540  * Since: 1.50
541  */
542 public enum PangoFontScale
543 {
544 	/**
545 	 * Leave the font size unchanged
546 	 */
547 	NONE = 0,
548 	/**
549 	 * Change the font to a size suitable for superscripts
550 	 */
551 	SUPERSCRIPT = 1,
552 	/**
553 	 * Change the font to a size suitable for subscripts
554 	 */
555 	SUBSCRIPT = 2,
556 	/**
557 	 * Change the font to a size suitable for Small Caps
558 	 */
559 	SMALL_CAPS = 3,
560 }
561 
562 /**
563  * `PangoGravity` represents the orientation of glyphs in a segment
564  * of text.
565  *
566  * This is useful when rendering vertical text layouts. In those situations,
567  * the layout is rotated using a non-identity [struct@Pango.Matrix], and then
568  * glyph orientation is controlled using `PangoGravity`.
569  *
570  * Not every value in this enumeration makes sense for every usage of
571  * `PangoGravity`; for example, %PANGO_GRAVITY_AUTO only can be passed to
572  * [method@Pango.Context.set_base_gravity] and can only be returned by
573  * [method@Pango.Context.get_base_gravity].
574  *
575  * See also: [enum@Pango.GravityHint]
576  *
577  * Since: 1.16
578  */
579 public enum PangoGravity
580 {
581 	/**
582 	 * Glyphs stand upright (default) <img align="right" valign="center" src="m-south.png">
583 	 */
584 	SOUTH = 0,
585 	/**
586 	 * Glyphs are rotated 90 degrees counter-clockwise. <img align="right" valign="center" src="m-east.png">
587 	 */
588 	EAST = 1,
589 	/**
590 	 * Glyphs are upside-down. <img align="right" valign="cener" src="m-north.png">
591 	 */
592 	NORTH = 2,
593 	/**
594 	 * Glyphs are rotated 90 degrees clockwise. <img align="right" valign="center" src="m-west.png">
595 	 */
596 	WEST = 3,
597 	/**
598 	 * Gravity is resolved from the context matrix
599 	 */
600 	AUTO = 4,
601 }
602 
603 /**
604  * `PangoGravityHint` defines how horizontal scripts should behave in a
605  * vertical context.
606  *
607  * That is, English excerpts in a vertical paragraph for example.
608  *
609  * See also [enum@Pango.Gravity]
610  *
611  * Since: 1.16
612  */
613 public enum PangoGravityHint
614 {
615 	/**
616 	 * scripts will take their natural gravity based
617 	 * on the base gravity and the script.  This is the default.
618 	 */
619 	NATURAL = 0,
620 	/**
621 	 * always use the base gravity set, regardless of
622 	 * the script.
623 	 */
624 	STRONG = 1,
625 	/**
626 	 * for scripts not in their natural direction (eg.
627 	 * Latin in East gravity), choose per-script gravity such that every script
628 	 * respects the line progression. This means, Latin and Arabic will take
629 	 * opposite gravities and both flow top-to-bottom for example.
630 	 */
631 	LINE = 2,
632 }
633 
634 /**
635  * Errors that can be returned by [func@Pango.Layout.deserialize].
636  *
637  * Since: 1.50
638  */
639 public enum PangoLayoutDeserializeError
640 {
641 	/**
642 	 * Unspecified error
643 	 */
644 	INVALID = 0,
645 	/**
646 	 * A JSon value could not be
647 	 * interpreted
648 	 */
649 	INVALID_VALUE = 1,
650 	/**
651 	 * A required JSon member was
652 	 * not found
653 	 */
654 	MISSING_VALUE = 2,
655 }
656 
657 /**
658  * Flags that influence the behavior of [func@Pango.Layout.deserialize].
659  *
660  * New members may be added to this enumeration over time.
661  *
662  * Since: 1.50
663  */
664 public enum PangoLayoutDeserializeFlags
665 {
666 	/**
667 	 * Default behavior
668 	 */
669 	DEFAULT = 0,
670 	/**
671 	 * Apply context information
672 	 * from the serialization to the `PangoContext`
673 	 */
674 	CONTEXT = 1,
675 }
676 
677 /**
678  * Flags that influence the behavior of [method@Pango.Layout.serialize].
679  *
680  * New members may be added to this enumeration over time.
681  *
682  * Since: 1.50
683  */
684 public enum PangoLayoutSerializeFlags
685 {
686 	/**
687 	 * Default behavior
688 	 */
689 	DEFAULT = 0,
690 	/**
691 	 * Include context information
692 	 */
693 	CONTEXT = 1,
694 	/**
695 	 * Include information about the formatted output
696 	 */
697 	OUTPUT = 2,
698 }
699 
700 /**
701  * The `PangoOverline` enumeration is used to specify whether text
702  * should be overlined, and if so, the type of line.
703  *
704  * Since: 1.46
705  */
706 public enum PangoOverline
707 {
708 	/**
709 	 * no overline should be drawn
710 	 */
711 	NONE = 0,
712 	/**
713 	 * Draw a single line above the ink
714 	 * extents of the text being underlined.
715 	 */
716 	SINGLE = 1,
717 }
718 
719 /**
720  * `PangoRenderPart` defines different items to render for such
721  * purposes as setting colors.
722  *
723  * Since: 1.8
724  */
725 public enum PangoRenderPart
726 {
727 	/**
728 	 * the text itself
729 	 */
730 	FOREGROUND = 0,
731 	/**
732 	 * the area behind the text
733 	 */
734 	BACKGROUND = 1,
735 	/**
736 	 * underlines
737 	 */
738 	UNDERLINE = 2,
739 	/**
740 	 * strikethrough lines
741 	 */
742 	STRIKETHROUGH = 3,
743 	/**
744 	 * overlines
745 	 */
746 	OVERLINE = 4,
747 }
748 
749 /**
750  * The `PangoScript` enumeration identifies different writing
751  * systems.
752  *
753  * The values correspond to the names as defined in the Unicode standard. See
754  * [Unicode Standard Annex 24: Script names](http://www.unicode.org/reports/tr24/)
755  *
756  * Note that this enumeration is deprecated and will not be updated to include values
757  * in newer versions of the Unicode standard. Applications should use the
758  * [enum@GLib.UnicodeScript] enumeration instead,
759  * whose values are interchangeable with `PangoScript`.
760  */
761 public enum PangoScript
762 {
763 	/**
764 	 * a value never returned from pango_script_for_unichar()
765 	 */
766 	INVALID_CODE = -1,
767 	/**
768 	 * a character used by multiple different scripts
769 	 */
770 	COMMON = 0,
771 	/**
772 	 * a mark glyph that takes its script from the
773 	 * base glyph to which it is attached
774 	 */
775 	INHERITED = 1,
776 	/**
777 	 * Arabic
778 	 */
779 	ARABIC = 2,
780 	/**
781 	 * Armenian
782 	 */
783 	ARMENIAN = 3,
784 	/**
785 	 * Bengali
786 	 */
787 	BENGALI = 4,
788 	/**
789 	 * Bopomofo
790 	 */
791 	BOPOMOFO = 5,
792 	/**
793 	 * Cherokee
794 	 */
795 	CHEROKEE = 6,
796 	/**
797 	 * Coptic
798 	 */
799 	COPTIC = 7,
800 	/**
801 	 * Cyrillic
802 	 */
803 	CYRILLIC = 8,
804 	/**
805 	 * Deseret
806 	 */
807 	DESERET = 9,
808 	/**
809 	 * Devanagari
810 	 */
811 	DEVANAGARI = 10,
812 	/**
813 	 * Ethiopic
814 	 */
815 	ETHIOPIC = 11,
816 	/**
817 	 * Georgian
818 	 */
819 	GEORGIAN = 12,
820 	/**
821 	 * Gothic
822 	 */
823 	GOTHIC = 13,
824 	/**
825 	 * Greek
826 	 */
827 	GREEK = 14,
828 	/**
829 	 * Gujarati
830 	 */
831 	GUJARATI = 15,
832 	/**
833 	 * Gurmukhi
834 	 */
835 	GURMUKHI = 16,
836 	/**
837 	 * Han
838 	 */
839 	HAN = 17,
840 	/**
841 	 * Hangul
842 	 */
843 	HANGUL = 18,
844 	/**
845 	 * Hebrew
846 	 */
847 	HEBREW = 19,
848 	/**
849 	 * Hiragana
850 	 */
851 	HIRAGANA = 20,
852 	/**
853 	 * Kannada
854 	 */
855 	KANNADA = 21,
856 	/**
857 	 * Katakana
858 	 */
859 	KATAKANA = 22,
860 	/**
861 	 * Khmer
862 	 */
863 	KHMER = 23,
864 	/**
865 	 * Lao
866 	 */
867 	LAO = 24,
868 	/**
869 	 * Latin
870 	 */
871 	LATIN = 25,
872 	/**
873 	 * Malayalam
874 	 */
875 	MALAYALAM = 26,
876 	/**
877 	 * Mongolian
878 	 */
879 	MONGOLIAN = 27,
880 	/**
881 	 * Myanmar
882 	 */
883 	MYANMAR = 28,
884 	/**
885 	 * Ogham
886 	 */
887 	OGHAM = 29,
888 	/**
889 	 * Old Italic
890 	 */
891 	OLD_ITALIC = 30,
892 	/**
893 	 * Oriya
894 	 */
895 	ORIYA = 31,
896 	/**
897 	 * Runic
898 	 */
899 	RUNIC = 32,
900 	/**
901 	 * Sinhala
902 	 */
903 	SINHALA = 33,
904 	/**
905 	 * Syriac
906 	 */
907 	SYRIAC = 34,
908 	/**
909 	 * Tamil
910 	 */
911 	TAMIL = 35,
912 	/**
913 	 * Telugu
914 	 */
915 	TELUGU = 36,
916 	/**
917 	 * Thaana
918 	 */
919 	THAANA = 37,
920 	/**
921 	 * Thai
922 	 */
923 	THAI = 38,
924 	/**
925 	 * Tibetan
926 	 */
927 	TIBETAN = 39,
928 	/**
929 	 * Canadian Aboriginal
930 	 */
931 	CANADIAN_ABORIGINAL = 40,
932 	/**
933 	 * Yi
934 	 */
935 	YI = 41,
936 	/**
937 	 * Tagalog
938 	 */
939 	TAGALOG = 42,
940 	/**
941 	 * Hanunoo
942 	 */
943 	HANUNOO = 43,
944 	/**
945 	 * Buhid
946 	 */
947 	BUHID = 44,
948 	/**
949 	 * Tagbanwa
950 	 */
951 	TAGBANWA = 45,
952 	/**
953 	 * Braille
954 	 */
955 	BRAILLE = 46,
956 	/**
957 	 * Cypriot
958 	 */
959 	CYPRIOT = 47,
960 	/**
961 	 * Limbu
962 	 */
963 	LIMBU = 48,
964 	/**
965 	 * Osmanya
966 	 */
967 	OSMANYA = 49,
968 	/**
969 	 * Shavian
970 	 */
971 	SHAVIAN = 50,
972 	/**
973 	 * Linear B
974 	 */
975 	LINEAR_B = 51,
976 	/**
977 	 * Tai Le
978 	 */
979 	TAI_LE = 52,
980 	/**
981 	 * Ugaritic
982 	 */
983 	UGARITIC = 53,
984 	/**
985 	 * New Tai Lue. Since 1.10
986 	 */
987 	NEW_TAI_LUE = 54,
988 	/**
989 	 * Buginese. Since 1.10
990 	 */
991 	BUGINESE = 55,
992 	/**
993 	 * Glagolitic. Since 1.10
994 	 */
995 	GLAGOLITIC = 56,
996 	/**
997 	 * Tifinagh. Since 1.10
998 	 */
999 	TIFINAGH = 57,
1000 	/**
1001 	 * Syloti Nagri. Since 1.10
1002 	 */
1003 	SYLOTI_NAGRI = 58,
1004 	/**
1005 	 * Old Persian. Since 1.10
1006 	 */
1007 	OLD_PERSIAN = 59,
1008 	/**
1009 	 * Kharoshthi. Since 1.10
1010 	 */
1011 	KHAROSHTHI = 60,
1012 	/**
1013 	 * an unassigned code point. Since 1.14
1014 	 */
1015 	UNKNOWN = 61,
1016 	/**
1017 	 * Balinese. Since 1.14
1018 	 */
1019 	BALINESE = 62,
1020 	/**
1021 	 * Cuneiform. Since 1.14
1022 	 */
1023 	CUNEIFORM = 63,
1024 	/**
1025 	 * Phoenician. Since 1.14
1026 	 */
1027 	PHOENICIAN = 64,
1028 	/**
1029 	 * Phags-pa. Since 1.14
1030 	 */
1031 	PHAGS_PA = 65,
1032 	/**
1033 	 * N'Ko. Since 1.14
1034 	 */
1035 	NKO = 66,
1036 	/**
1037 	 * Kayah Li. Since 1.20.1
1038 	 */
1039 	KAYAH_LI = 67,
1040 	/**
1041 	 * Lepcha. Since 1.20.1
1042 	 */
1043 	LEPCHA = 68,
1044 	/**
1045 	 * Rejang. Since 1.20.1
1046 	 */
1047 	REJANG = 69,
1048 	/**
1049 	 * Sundanese. Since 1.20.1
1050 	 */
1051 	SUNDANESE = 70,
1052 	/**
1053 	 * Saurashtra. Since 1.20.1
1054 	 */
1055 	SAURASHTRA = 71,
1056 	/**
1057 	 * Cham. Since 1.20.1
1058 	 */
1059 	CHAM = 72,
1060 	/**
1061 	 * Ol Chiki. Since 1.20.1
1062 	 */
1063 	OL_CHIKI = 73,
1064 	/**
1065 	 * Vai. Since 1.20.1
1066 	 */
1067 	VAI = 74,
1068 	/**
1069 	 * Carian. Since 1.20.1
1070 	 */
1071 	CARIAN = 75,
1072 	/**
1073 	 * Lycian. Since 1.20.1
1074 	 */
1075 	LYCIAN = 76,
1076 	/**
1077 	 * Lydian. Since 1.20.1
1078 	 */
1079 	LYDIAN = 77,
1080 	/**
1081 	 * Batak. Since 1.32
1082 	 */
1083 	BATAK = 78,
1084 	/**
1085 	 * Brahmi. Since 1.32
1086 	 */
1087 	BRAHMI = 79,
1088 	/**
1089 	 * Mandaic. Since 1.32
1090 	 */
1091 	MANDAIC = 80,
1092 	/**
1093 	 * Chakma. Since: 1.32
1094 	 */
1095 	CHAKMA = 81,
1096 	/**
1097 	 * Meroitic Cursive. Since: 1.32
1098 	 */
1099 	MEROITIC_CURSIVE = 82,
1100 	/**
1101 	 * Meroitic Hieroglyphs. Since: 1.32
1102 	 */
1103 	MEROITIC_HIEROGLYPHS = 83,
1104 	/**
1105 	 * Miao. Since: 1.32
1106 	 */
1107 	MIAO = 84,
1108 	/**
1109 	 * Sharada. Since: 1.32
1110 	 */
1111 	SHARADA = 85,
1112 	/**
1113 	 * Sora Sompeng. Since: 1.32
1114 	 */
1115 	SORA_SOMPENG = 86,
1116 	/**
1117 	 * Takri. Since: 1.32
1118 	 */
1119 	TAKRI = 87,
1120 	/**
1121 	 * Bassa. Since: 1.40
1122 	 */
1123 	BASSA_VAH = 88,
1124 	/**
1125 	 * Caucasian Albanian. Since: 1.40
1126 	 */
1127 	CAUCASIAN_ALBANIAN = 89,
1128 	/**
1129 	 * Duployan. Since: 1.40
1130 	 */
1131 	DUPLOYAN = 90,
1132 	/**
1133 	 * Elbasan. Since: 1.40
1134 	 */
1135 	ELBASAN = 91,
1136 	/**
1137 	 * Grantha. Since: 1.40
1138 	 */
1139 	GRANTHA = 92,
1140 	/**
1141 	 * Kjohki. Since: 1.40
1142 	 */
1143 	KHOJKI = 93,
1144 	/**
1145 	 * Khudawadi, Sindhi. Since: 1.40
1146 	 */
1147 	KHUDAWADI = 94,
1148 	/**
1149 	 * Linear A. Since: 1.40
1150 	 */
1151 	LINEAR_A = 95,
1152 	/**
1153 	 * Mahajani. Since: 1.40
1154 	 */
1155 	MAHAJANI = 96,
1156 	/**
1157 	 * Manichaean. Since: 1.40
1158 	 */
1159 	MANICHAEAN = 97,
1160 	/**
1161 	 * Mende Kikakui. Since: 1.40
1162 	 */
1163 	MENDE_KIKAKUI = 98,
1164 	/**
1165 	 * Modi. Since: 1.40
1166 	 */
1167 	MODI = 99,
1168 	/**
1169 	 * Mro. Since: 1.40
1170 	 */
1171 	MRO = 100,
1172 	/**
1173 	 * Nabataean. Since: 1.40
1174 	 */
1175 	NABATAEAN = 101,
1176 	/**
1177 	 * Old North Arabian. Since: 1.40
1178 	 */
1179 	OLD_NORTH_ARABIAN = 102,
1180 	/**
1181 	 * Old Permic. Since: 1.40
1182 	 */
1183 	OLD_PERMIC = 103,
1184 	/**
1185 	 * Pahawh Hmong. Since: 1.40
1186 	 */
1187 	PAHAWH_HMONG = 104,
1188 	/**
1189 	 * Palmyrene. Since: 1.40
1190 	 */
1191 	PALMYRENE = 105,
1192 	/**
1193 	 * Pau Cin Hau. Since: 1.40
1194 	 */
1195 	PAU_CIN_HAU = 106,
1196 	/**
1197 	 * Psalter Pahlavi. Since: 1.40
1198 	 */
1199 	PSALTER_PAHLAVI = 107,
1200 	/**
1201 	 * Siddham. Since: 1.40
1202 	 */
1203 	SIDDHAM = 108,
1204 	/**
1205 	 * Tirhuta. Since: 1.40
1206 	 */
1207 	TIRHUTA = 109,
1208 	/**
1209 	 * Warang Citi. Since: 1.40
1210 	 */
1211 	WARANG_CITI = 110,
1212 	/**
1213 	 * Ahom. Since: 1.40
1214 	 */
1215 	AHOM = 111,
1216 	/**
1217 	 * Anatolian Hieroglyphs. Since: 1.40
1218 	 */
1219 	ANATOLIAN_HIEROGLYPHS = 112,
1220 	/**
1221 	 * Hatran. Since: 1.40
1222 	 */
1223 	HATRAN = 113,
1224 	/**
1225 	 * Multani. Since: 1.40
1226 	 */
1227 	MULTANI = 114,
1228 	/**
1229 	 * Old Hungarian. Since: 1.40
1230 	 */
1231 	OLD_HUNGARIAN = 115,
1232 	/**
1233 	 * Signwriting. Since: 1.40
1234 	 */
1235 	SIGNWRITING = 116,
1236 }
1237 
1238 /**
1239  * Flags influencing the shaping process.
1240  *
1241  * `PangoShapeFlags` can be passed to [func@Pango.shape_with_flags].
1242  *
1243  * Since: 1.44
1244  */
1245 public enum PangoShapeFlags
1246 {
1247 	/**
1248 	 * Default value
1249 	 */
1250 	NONE = 0,
1251 	/**
1252 	 * Round glyph positions and widths to whole device units
1253 	 * This option should be set if the target renderer can't do subpixel positioning of glyphs
1254 	 */
1255 	ROUND_POSITIONS = 1,
1256 }
1257 
1258 /**
1259  * These flags affect how Pango treats characters that are normally
1260  * not visible in the output.
1261  *
1262  * Since: 1.44
1263  */
1264 public enum PangoShowFlags
1265 {
1266 	/**
1267 	 * No special treatment for invisible characters
1268 	 */
1269 	NONE = 0,
1270 	/**
1271 	 * Render spaces, tabs and newlines visibly
1272 	 */
1273 	SPACES = 1,
1274 	/**
1275 	 * Render line breaks visibly
1276 	 */
1277 	LINE_BREAKS = 2,
1278 	/**
1279 	 * Render default-ignorable Unicode
1280 	 * characters visibly
1281 	 */
1282 	IGNORABLES = 4,
1283 }
1284 
1285 /**
1286  * An enumeration specifying the width of the font relative to other designs
1287  * within a family.
1288  */
1289 public enum PangoStretch
1290 {
1291 	/**
1292 	 * ultra condensed width
1293 	 */
1294 	ULTRA_CONDENSED = 0,
1295 	/**
1296 	 * extra condensed width
1297 	 */
1298 	EXTRA_CONDENSED = 1,
1299 	/**
1300 	 * condensed width
1301 	 */
1302 	CONDENSED = 2,
1303 	/**
1304 	 * semi condensed width
1305 	 */
1306 	SEMI_CONDENSED = 3,
1307 	/**
1308 	 * the normal width
1309 	 */
1310 	NORMAL = 4,
1311 	/**
1312 	 * semi expanded width
1313 	 */
1314 	SEMI_EXPANDED = 5,
1315 	/**
1316 	 * expanded width
1317 	 */
1318 	EXPANDED = 6,
1319 	/**
1320 	 * extra expanded width
1321 	 */
1322 	EXTRA_EXPANDED = 7,
1323 	/**
1324 	 * ultra expanded width
1325 	 */
1326 	ULTRA_EXPANDED = 8,
1327 }
1328 
1329 /**
1330  * An enumeration specifying the various slant styles possible for a font.
1331  */
1332 public enum PangoStyle
1333 {
1334 	/**
1335 	 * the font is upright.
1336 	 */
1337 	NORMAL = 0,
1338 	/**
1339 	 * the font is slanted, but in a roman style.
1340 	 */
1341 	OBLIQUE = 1,
1342 	/**
1343 	 * the font is slanted in an italic style.
1344 	 */
1345 	ITALIC = 2,
1346 }
1347 
1348 /**
1349  * `PangoTabAlign` specifies where the text appears relative to the tab stop
1350  * position.
1351  */
1352 public enum PangoTabAlign
1353 {
1354 	/**
1355 	 * the text appears to the right of the tab stop position
1356 	 */
1357 	LEFT = 0,
1358 	/**
1359 	 * the text appears to the left of the tab stop position
1360 	 * until the available space is filled. Since: 1.50
1361 	 */
1362 	RIGHT = 1,
1363 	/**
1364 	 * the text is centered at the tab stop position
1365 	 * until the available space is filled. Since: 1.50
1366 	 */
1367 	CENTER = 2,
1368 	/**
1369 	 * text before the first occurrence of the decimal point
1370 	 * character appears to the left of the tab stop position (until the available
1371 	 * space is filled), the rest to the right. Since: 1.50
1372 	 */
1373 	DECIMAL = 3,
1374 }
1375 
1376 /**
1377  * An enumeration that affects how Pango treats characters during shaping.
1378  *
1379  * Since: 1.50
1380  */
1381 public enum PangoTextTransform
1382 {
1383 	/**
1384 	 * Leave text unchanged
1385 	 */
1386 	NONE = 0,
1387 	/**
1388 	 * Display letters and numbers as lowercase
1389 	 */
1390 	LOWERCASE = 1,
1391 	/**
1392 	 * Display letters and numbers as uppercase
1393 	 */
1394 	UPPERCASE = 2,
1395 	/**
1396 	 * Display the first character of a word
1397 	 * in titlecase
1398 	 */
1399 	CAPITALIZE = 3,
1400 }
1401 
1402 /**
1403  * The `PangoUnderline` enumeration is used to specify whether text
1404  * should be underlined, and if so, the type of underlining.
1405  */
1406 public enum PangoUnderline
1407 {
1408 	/**
1409 	 * no underline should be drawn
1410 	 */
1411 	NONE = 0,
1412 	/**
1413 	 * a single underline should be drawn
1414 	 */
1415 	SINGLE = 1,
1416 	/**
1417 	 * a double underline should be drawn
1418 	 */
1419 	DOUBLE = 2,
1420 	/**
1421 	 * a single underline should be drawn at a
1422 	 * position beneath the ink extents of the text being
1423 	 * underlined. This should be used only for underlining
1424 	 * single characters, such as for keyboard accelerators.
1425 	 * %PANGO_UNDERLINE_SINGLE should be used for extended
1426 	 * portions of text.
1427 	 */
1428 	LOW = 3,
1429 	/**
1430 	 * an underline indicating an error should
1431 	 * be drawn below. The exact style of rendering is up to the
1432 	 * `PangoRenderer` in use, but typical styles include wavy
1433 	 * or dotted lines.
1434 	 * This underline is typically used to indicate an error such
1435 	 * as a possible mispelling; in some cases a contrasting color
1436 	 * may automatically be used. This type of underlining is
1437 	 * available since Pango 1.4.
1438 	 */
1439 	ERROR = 4,
1440 	/**
1441 	 * Like @PANGO_UNDERLINE_SINGLE, but
1442 	 * drawn continuously across multiple runs. This type
1443 	 * of underlining is available since Pango 1.46.
1444 	 */
1445 	SINGLE_LINE = 5,
1446 	/**
1447 	 * Like @PANGO_UNDERLINE_DOUBLE, but
1448 	 * drawn continuously across multiple runs. This type
1449 	 * of underlining is available since Pango 1.46.
1450 	 */
1451 	DOUBLE_LINE = 6,
1452 	/**
1453 	 * Like @PANGO_UNDERLINE_ERROR, but
1454 	 * drawn continuously across multiple runs. This type
1455 	 * of underlining is available since Pango 1.46.
1456 	 */
1457 	ERROR_LINE = 7,
1458 }
1459 
1460 /**
1461  * An enumeration specifying capitalization variant of the font.
1462  */
1463 public enum PangoVariant
1464 {
1465 	/**
1466 	 * A normal font.
1467 	 */
1468 	NORMAL = 0,
1469 	/**
1470 	 * A font with the lower case characters
1471 	 * replaced by smaller variants of the capital characters.
1472 	 */
1473 	SMALL_CAPS = 1,
1474 	/**
1475 	 * A font with all characters
1476 	 * replaced by smaller variants of the capital characters. Since: 1.50
1477 	 */
1478 	ALL_SMALL_CAPS = 2,
1479 	/**
1480 	 * A font with the lower case characters
1481 	 * replaced by smaller variants of the capital characters.
1482 	 * Petite Caps can be even smaller than Small Caps. Since: 1.50
1483 	 */
1484 	PETITE_CAPS = 3,
1485 	/**
1486 	 * A font with all characters
1487 	 * replaced by smaller variants of the capital characters.
1488 	 * Petite Caps can be even smaller than Small Caps. Since: 1.50
1489 	 */
1490 	ALL_PETITE_CAPS = 4,
1491 	/**
1492 	 * A font with the upper case characters
1493 	 * replaced by smaller variants of the capital letters. Since: 1.50
1494 	 */
1495 	UNICASE = 5,
1496 	/**
1497 	 * A font with capital letters that
1498 	 * are more suitable for all-uppercase titles. Since: 1.50
1499 	 */
1500 	TITLE_CAPS = 6,
1501 }
1502 
1503 /**
1504  * An enumeration specifying the weight (boldness) of a font.
1505  *
1506  * Weight is specified as a numeric value ranging from 100 to 1000.
1507  * This enumeration simply provides some common, predefined values.
1508  */
1509 public enum PangoWeight
1510 {
1511 	/**
1512 	 * the thin weight (= 100) Since: 1.24
1513 	 */
1514 	THIN = 100,
1515 	/**
1516 	 * the ultralight weight (= 200)
1517 	 */
1518 	ULTRALIGHT = 200,
1519 	/**
1520 	 * the light weight (= 300)
1521 	 */
1522 	LIGHT = 300,
1523 	/**
1524 	 * the semilight weight (= 350) Since: 1.36.7
1525 	 */
1526 	SEMILIGHT = 350,
1527 	/**
1528 	 * the book weight (= 380) Since: 1.24)
1529 	 */
1530 	BOOK = 380,
1531 	/**
1532 	 * the default weight (= 400)
1533 	 */
1534 	NORMAL = 400,
1535 	/**
1536 	 * the normal weight (= 500) Since: 1.24
1537 	 */
1538 	MEDIUM = 500,
1539 	/**
1540 	 * the semibold weight (= 600)
1541 	 */
1542 	SEMIBOLD = 600,
1543 	/**
1544 	 * the bold weight (= 700)
1545 	 */
1546 	BOLD = 700,
1547 	/**
1548 	 * the ultrabold weight (= 800)
1549 	 */
1550 	ULTRABOLD = 800,
1551 	/**
1552 	 * the heavy weight (= 900)
1553 	 */
1554 	HEAVY = 900,
1555 	/**
1556 	 * the ultraheavy weight (= 1000) Since: 1.24
1557 	 */
1558 	ULTRAHEAVY = 1000,
1559 }
1560 
1561 /**
1562  * `PangoWrapMode` describes how to wrap the lines of a `PangoLayout`
1563  * to the desired width.
1564  *
1565  * For @PANGO_WRAP_WORD, Pango uses break opportunities that are determined
1566  * by the Unicode line breaking algorithm. For @PANGO_WRAP_CHAR, Pango allows
1567  * breaking at grapheme boundaries that are determined by the Unicode text
1568  * segmentation algorithm.
1569  */
1570 public enum PangoWrapMode
1571 {
1572 	/**
1573 	 * wrap lines at word boundaries.
1574 	 */
1575 	WORD = 0,
1576 	/**
1577 	 * wrap lines at character boundaries.
1578 	 */
1579 	CHAR = 1,
1580 	/**
1581 	 * wrap lines at word boundaries, but fall back to
1582 	 * character boundaries if there is not enough space for a full word.
1583 	 */
1584 	WORD_CHAR = 2,
1585 }
1586 
1587 struct PangoFcFontMap
1588 {
1589 	PangoFontMap parentInstance;
1590 	void* priv;
1591 }
1592 
1593 struct PangoCairoFont;
1594 
1595 
1596 /**
1597  * The `PangoAnalysis` structure stores information about
1598  * the properties of a segment of text.
1599  */
1600 struct PangoAnalysis
1601 {
1602 	/**
1603 	 * unused, reserved
1604 	 */
1605 	void* shapeEngine;
1606 	/**
1607 	 * unused, reserved
1608 	 */
1609 	void* langEngine;
1610 	/**
1611 	 * the font for this segment.
1612 	 */
1613 	PangoFont* font;
1614 	/**
1615 	 * the bidirectional level for this segment.
1616 	 */
1617 	ubyte level;
1618 	/**
1619 	 * the glyph orientation for this segment (A `PangoGravity`).
1620 	 */
1621 	ubyte gravity;
1622 	/**
1623 	 * boolean flags for this segment (Since: 1.16).
1624 	 */
1625 	ubyte flags;
1626 	/**
1627 	 * the detected script for this segment (A `PangoScript`) (Since: 1.18).
1628 	 */
1629 	ubyte script;
1630 	/**
1631 	 * the detected language for this segment.
1632 	 */
1633 	PangoLanguage* language;
1634 	/**
1635 	 * extra attributes for this segment.
1636 	 */
1637 	GSList* extraAttrs;
1638 }
1639 
1640 /**
1641  * The `PangoAttrClass` structure stores the type and operations for
1642  * a particular type of attribute.
1643  *
1644  * The functions in this structure should not be called directly. Instead,
1645  * one should use the wrapper functions provided for `PangoAttribute`.
1646  */
1647 struct PangoAttrClass
1648 {
1649 	/**
1650 	 * the type ID for this attribute
1651 	 */
1652 	PangoAttrType type;
1653 	/** */
1654 	extern(C) PangoAttribute* function(PangoAttribute* attr) copy;
1655 	/** */
1656 	extern(C) void function(PangoAttribute* attr) destroy;
1657 	/** */
1658 	extern(C) int function(PangoAttribute* attr1, PangoAttribute* attr2) equal;
1659 }
1660 
1661 /**
1662  * The `PangoAttrColor` structure is used to represent attributes that
1663  * are colors.
1664  */
1665 struct PangoAttrColor
1666 {
1667 	/**
1668 	 * the common portion of the attribute
1669 	 */
1670 	PangoAttribute attr;
1671 	/**
1672 	 * the `PangoColor` which is the value of the attribute
1673 	 */
1674 	PangoColor color;
1675 }
1676 
1677 /**
1678  * The `PangoAttrFloat` structure is used to represent attributes with
1679  * a float or double value.
1680  */
1681 struct PangoAttrFloat
1682 {
1683 	/**
1684 	 * the common portion of the attribute
1685 	 */
1686 	PangoAttribute attr;
1687 	/**
1688 	 * the value of the attribute
1689 	 */
1690 	double value;
1691 }
1692 
1693 /**
1694  * The `PangoAttrFontDesc` structure is used to store an attribute that
1695  * sets all aspects of the font description at once.
1696  */
1697 struct PangoAttrFontDesc
1698 {
1699 	/**
1700 	 * the common portion of the attribute
1701 	 */
1702 	PangoAttribute attr;
1703 	/**
1704 	 * the font description which is the value of this attribute
1705 	 */
1706 	PangoFontDescription* desc;
1707 }
1708 
1709 /**
1710  * The `PangoAttrFontFeatures` structure is used to represent OpenType
1711  * font features as an attribute.
1712  *
1713  * Since: 1.38
1714  */
1715 struct PangoAttrFontFeatures
1716 {
1717 	/**
1718 	 * the common portion of the attribute
1719 	 */
1720 	PangoAttribute attr;
1721 	/**
1722 	 * the features, as a string in CSS syntax
1723 	 */
1724 	char* features;
1725 }
1726 
1727 /**
1728  * The `PangoAttrInt` structure is used to represent attributes with
1729  * an integer or enumeration value.
1730  */
1731 struct PangoAttrInt
1732 {
1733 	/**
1734 	 * the common portion of the attribute
1735 	 */
1736 	PangoAttribute attr;
1737 	/**
1738 	 * the value of the attribute
1739 	 */
1740 	int value;
1741 }
1742 
1743 struct PangoAttrIterator;
1744 
1745 /**
1746  * The `PangoAttrLanguage` structure is used to represent attributes that
1747  * are languages.
1748  */
1749 struct PangoAttrLanguage
1750 {
1751 	/**
1752 	 * the common portion of the attribute
1753 	 */
1754 	PangoAttribute attr;
1755 	/**
1756 	 * the `PangoLanguage` which is the value of the attribute
1757 	 */
1758 	PangoLanguage* value;
1759 }
1760 
1761 struct PangoAttrList;
1762 
1763 /**
1764  * The `PangoAttrShape` structure is used to represent attributes which
1765  * impose shape restrictions.
1766  */
1767 struct PangoAttrShape
1768 {
1769 	/**
1770 	 * the common portion of the attribute
1771 	 */
1772 	PangoAttribute attr;
1773 	/**
1774 	 * the ink rectangle to restrict to
1775 	 */
1776 	PangoRectangle inkRect;
1777 	/**
1778 	 * the logical rectangle to restrict to
1779 	 */
1780 	PangoRectangle logicalRect;
1781 	/**
1782 	 * user data set (see [func@Pango.AttrShape.new_with_data])
1783 	 */
1784 	void* data;
1785 	/**
1786 	 * copy function for the user data
1787 	 */
1788 	PangoAttrDataCopyFunc copyFunc;
1789 	/**
1790 	 * destroy function for the user data
1791 	 */
1792 	GDestroyNotify destroyFunc;
1793 }
1794 
1795 /**
1796  * The `PangoAttrSize` structure is used to represent attributes which
1797  * set font size.
1798  */
1799 struct PangoAttrSize
1800 {
1801 	/**
1802 	 * the common portion of the attribute
1803 	 */
1804 	PangoAttribute attr;
1805 	/**
1806 	 * size of font, in units of 1/%PANGO_SCALE of a point (for
1807 	 * %PANGO_ATTR_SIZE) or of a device unit (for %PANGO_ATTR_ABSOLUTE_SIZE)
1808 	 */
1809 	int size;
1810 	import std.bitmanip: bitfields;
1811 	mixin(bitfields!(
1812 		uint, "absolute", 1,
1813 		uint, "", 31
1814 	));
1815 }
1816 
1817 /**
1818  * The `PangoAttrString` structure is used to represent attributes with
1819  * a string value.
1820  */
1821 struct PangoAttrString
1822 {
1823 	/**
1824 	 * the common portion of the attribute
1825 	 */
1826 	PangoAttribute attr;
1827 	/**
1828 	 * the string which is the value of the attribute
1829 	 */
1830 	char* value;
1831 }
1832 
1833 struct PangoAttribute
1834 {
1835 	/**
1836 	 * the class structure holding information about the type of the attribute
1837 	 */
1838 	PangoAttrClass* klass;
1839 	/**
1840 	 * the start index of the range (in bytes).
1841 	 */
1842 	uint startIndex;
1843 	/**
1844 	 * end index of the range (in bytes). The character at this index
1845 	 * is not included in the range.
1846 	 */
1847 	uint endIndex;
1848 }
1849 
1850 struct PangoColor
1851 {
1852 	/**
1853 	 * value of red component
1854 	 */
1855 	ushort red;
1856 	/**
1857 	 * value of green component
1858 	 */
1859 	ushort green;
1860 	/**
1861 	 * value of blue component
1862 	 */
1863 	ushort blue;
1864 }
1865 
1866 struct PangoContext;
1867 
1868 struct PangoContextClass;
1869 
1870 struct PangoCoverage;
1871 
1872 struct PangoFont
1873 {
1874 	GObject parentInstance;
1875 }
1876 
1877 struct PangoFontClass
1878 {
1879 	GObjectClass parentClass;
1880 	/**
1881 	 *
1882 	 * Params:
1883 	 *     font = a `PangoFont`
1884 	 * Returns: a newly-allocated `PangoFontDescription` object.
1885 	 */
1886 	extern(C) PangoFontDescription* function(PangoFont* font) describe;
1887 	/**
1888 	 *
1889 	 * Params:
1890 	 *     font = a `PangoFont`
1891 	 *     language = the language tag
1892 	 * Returns: a newly-allocated `PangoCoverage`
1893 	 *     object.
1894 	 */
1895 	extern(C) PangoCoverage* function(PangoFont* font, PangoLanguage* language) getCoverage;
1896 	/** */
1897 	extern(C) void function(PangoFont* font, PangoGlyph glyph, PangoRectangle* inkRect, PangoRectangle* logicalRect) getGlyphExtents;
1898 	/**
1899 	 *
1900 	 * Params:
1901 	 *     font = a `PangoFont`
1902 	 *     language = language tag used to determine which script
1903 	 *         to get the metrics for, or %NULL to indicate to get the metrics for
1904 	 *         the entire font.
1905 	 * Returns: a `PangoFontMetrics` object. The caller must call
1906 	 *     [method@Pango.FontMetrics.unref] when finished using the object.
1907 	 */
1908 	extern(C) PangoFontMetrics* function(PangoFont* font, PangoLanguage* language) getMetrics;
1909 	/**
1910 	 *
1911 	 * Params:
1912 	 *     font = a `PangoFont`
1913 	 * Returns: the `PangoFontMap`
1914 	 *     for the font
1915 	 */
1916 	extern(C) PangoFontMap* function(PangoFont* font) getFontMap;
1917 	/** */
1918 	extern(C) PangoFontDescription* function(PangoFont* font) describeAbsolute;
1919 	/** */
1920 	extern(C) void function(PangoFont* font, hb_feature_t* features, uint len, uint* numFeatures) getFeatures;
1921 	/** */
1922 	extern(C) hb_font_t* function(PangoFont* font) createHbFont;
1923 }
1924 
1925 struct PangoFontDescription;
1926 
1927 struct PangoFontFace
1928 {
1929 	GObject parentInstance;
1930 }
1931 
1932 struct PangoFontFaceClass
1933 {
1934 	GObjectClass parentClass;
1935 	/**
1936 	 *
1937 	 * Params:
1938 	 *     face = a `PangoFontFace`.
1939 	 * Returns: the face name for the face. This string is
1940 	 *     owned by the face object and must not be modified or freed.
1941 	 */
1942 	extern(C) const(char)* function(PangoFontFace* face) getFaceName;
1943 	/**
1944 	 *
1945 	 * Params:
1946 	 *     face = a `PangoFontFace`
1947 	 * Returns: a newly-created `PangoFontDescription` structure
1948 	 *     holding the description of the face. Use [method@Pango.FontDescription.free]
1949 	 *     to free the result.
1950 	 */
1951 	extern(C) PangoFontDescription* function(PangoFontFace* face) describe;
1952 	/** */
1953 	extern(C) void function(PangoFontFace* face, int** sizes, int* nSizes) listSizes;
1954 	/**
1955 	 *
1956 	 * Params:
1957 	 *     face = a `PangoFontFace`
1958 	 * Returns: whether @face is synthesized
1959 	 */
1960 	extern(C) int function(PangoFontFace* face) isSynthesized;
1961 	/**
1962 	 *
1963 	 * Params:
1964 	 *     face = a `PangoFontFace`
1965 	 * Returns: the `PangoFontFamily`
1966 	 */
1967 	extern(C) PangoFontFamily* function(PangoFontFace* face) getFamily;
1968 	/** */
1969 	extern(C) void function() PangoReserved3;
1970 	/** */
1971 	extern(C) void function() PangoReserved4;
1972 }
1973 
1974 struct PangoFontFamily
1975 {
1976 	GObject parentInstance;
1977 }
1978 
1979 struct PangoFontFamilyClass
1980 {
1981 	GObjectClass parentClass;
1982 	/** */
1983 	extern(C) void function(PangoFontFamily* family, PangoFontFace*** faces, int* nFaces) listFaces;
1984 	/**
1985 	 *
1986 	 * Params:
1987 	 *     family = a `PangoFontFamily`
1988 	 * Returns: the name of the family. This string is owned
1989 	 *     by the family object and must not be modified or freed.
1990 	 */
1991 	extern(C) const(char)* function(PangoFontFamily* family) getName;
1992 	/**
1993 	 *
1994 	 * Params:
1995 	 *     family = a `PangoFontFamily`
1996 	 * Returns: %TRUE if the family is monospace.
1997 	 */
1998 	extern(C) int function(PangoFontFamily* family) isMonospace;
1999 	/**
2000 	 *
2001 	 * Params:
2002 	 *     family = a `PangoFontFamily`
2003 	 * Returns: %TRUE if the family is variable
2004 	 */
2005 	extern(C) int function(PangoFontFamily* family) isVariable;
2006 	/**
2007 	 *
2008 	 * Params:
2009 	 *     family = a `PangoFontFamily`
2010 	 *     name = the name of a face. If the name is %NULL,
2011 	 *         the family's default face (fontconfig calls it "Regular")
2012 	 *         will be returned.
2013 	 * Returns: the `PangoFontFace`,
2014 	 *     or %NULL if no face with the given name exists.
2015 	 */
2016 	extern(C) PangoFontFace* function(PangoFontFamily* family, const(char)* name) getFace;
2017 	/** */
2018 	extern(C) void function() PangoReserved2;
2019 }
2020 
2021 struct PangoFontMap
2022 {
2023 	GObject parentInstance;
2024 }
2025 
2026 /**
2027  * The `PangoFontMapClass` structure holds the virtual functions for
2028  * a particular `PangoFontMap` implementation.
2029  */
2030 struct PangoFontMapClass
2031 {
2032 	/**
2033 	 * parent `GObjectClass`
2034 	 */
2035 	GObjectClass parentClass;
2036 	/**
2037 	 *
2038 	 * Params:
2039 	 *     fontmap = a `PangoFontMap`
2040 	 *     context = the `PangoContext` the font will be used with
2041 	 *     desc = a `PangoFontDescription` describing the font to load
2042 	 * Returns: the newly allocated `PangoFont`
2043 	 *     loaded, or %NULL if no font matched.
2044 	 */
2045 	extern(C) PangoFont* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc) loadFont;
2046 	/** */
2047 	extern(C) void function(PangoFontMap* fontmap, PangoFontFamily*** families, int* nFamilies) listFamilies;
2048 	/**
2049 	 *
2050 	 * Params:
2051 	 *     fontmap = a `PangoFontMap`
2052 	 *     context = the `PangoContext` the font will be used with
2053 	 *     desc = a `PangoFontDescription` describing the font to load
2054 	 *     language = a `PangoLanguage` the fonts will be used for
2055 	 * Returns: the newly allocated
2056 	 *     `PangoFontset` loaded, or %NULL if no font matched.
2057 	 */
2058 	extern(C) PangoFontset* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc, PangoLanguage* language) loadFontset;
2059 	/**
2060 	 * the type of rendering-system-dependent engines that
2061 	 * can handle fonts of this fonts loaded with this fontmap.
2062 	 */
2063 	const(char)* shapeEngineType;
2064 	/**
2065 	 *
2066 	 * Params:
2067 	 *     fontmap = a `PangoFontMap`
2068 	 * Returns: The current serial number of @fontmap.
2069 	 */
2070 	extern(C) uint function(PangoFontMap* fontmap) getSerial;
2071 	/** */
2072 	extern(C) void function(PangoFontMap* fontmap) changed;
2073 	/**
2074 	 *
2075 	 * Params:
2076 	 *     fontmap = a `PangoFontMap`
2077 	 *     name = a family name
2078 	 * Returns: the `PangoFontFamily`
2079 	 */
2080 	extern(C) PangoFontFamily* function(PangoFontMap* fontmap, const(char)* name) getFamily;
2081 	/** */
2082 	extern(C) PangoFontFace* function(PangoFontMap* fontmap, PangoFont* font) getFace;
2083 }
2084 
2085 struct PangoFontMetrics
2086 {
2087 	uint refCount;
2088 	int ascent;
2089 	int descent;
2090 	int height;
2091 	int approximateCharWidth;
2092 	int approximateDigitWidth;
2093 	int underlinePosition;
2094 	int underlineThickness;
2095 	int strikethroughPosition;
2096 	int strikethroughThickness;
2097 }
2098 
2099 struct PangoFontset
2100 {
2101 	GObject parentInstance;
2102 }
2103 
2104 /**
2105  * The `PangoFontsetClass` structure holds the virtual functions for
2106  * a particular `PangoFontset` implementation.
2107  */
2108 struct PangoFontsetClass
2109 {
2110 	/**
2111 	 * parent `GObjectClass`
2112 	 */
2113 	GObjectClass parentClass;
2114 	/**
2115 	 *
2116 	 * Params:
2117 	 *     fontset = a `PangoFontset`
2118 	 *     wc = a Unicode character
2119 	 * Returns: a `PangoFont`
2120 	 */
2121 	extern(C) PangoFont* function(PangoFontset* fontset, uint wc) getFont;
2122 	/**
2123 	 *
2124 	 * Params:
2125 	 *     fontset = a `PangoFontset`
2126 	 * Returns: a `PangoFontMetrics` object
2127 	 */
2128 	extern(C) PangoFontMetrics* function(PangoFontset* fontset) getMetrics;
2129 	/** */
2130 	extern(C) PangoLanguage* function(PangoFontset* fontset) getLanguage;
2131 	/** */
2132 	extern(C) void function(PangoFontset* fontset, PangoFontsetForeachFunc func, void* data) foreach_;
2133 	/** */
2134 	extern(C) void function() PangoReserved1;
2135 	/** */
2136 	extern(C) void function() PangoReserved2;
2137 	/** */
2138 	extern(C) void function() PangoReserved3;
2139 	/** */
2140 	extern(C) void function() PangoReserved4;
2141 }
2142 
2143 struct PangoFontsetSimple;
2144 
2145 struct PangoFontsetSimpleClass;
2146 
2147 /**
2148  * The `PangoGlyphGeometry` structure contains width and positioning
2149  * information for a single glyph.
2150  *
2151  * Note that @width is not guaranteed to be the same as the glyph
2152  * extents. Kerning and other positioning applied during shaping will
2153  * affect both the @width and the @x_offset for the glyphs in the
2154  * glyph string that results from shaping.
2155  *
2156  * The information in this struct is intended for rendering the glyphs,
2157  * as follows:
2158  *
2159  * 1. Assume the current point is (x, y)
2160  * 2. Render the current glyph at (x + x_offset, y + y_offset),
2161  * 3. Advance the current point to (x + width, y)
2162  * 4. Render the next glyph
2163  */
2164 struct PangoGlyphGeometry
2165 {
2166 	/**
2167 	 * the logical width to use for the the character.
2168 	 */
2169 	PangoGlyphUnit width;
2170 	/**
2171 	 * horizontal offset from nominal character position.
2172 	 */
2173 	PangoGlyphUnit xOffset;
2174 	/**
2175 	 * vertical offset from nominal character position.
2176 	 */
2177 	PangoGlyphUnit yOffset;
2178 }
2179 
2180 /**
2181  * A `PangoGlyphInfo` structure represents a single glyph with
2182  * positioning information and visual attributes.
2183  */
2184 struct PangoGlyphInfo
2185 {
2186 	/**
2187 	 * the glyph itself.
2188 	 */
2189 	PangoGlyph glyph;
2190 	/**
2191 	 * the positional information about the glyph.
2192 	 */
2193 	PangoGlyphGeometry geometry;
2194 	/**
2195 	 * the visual attributes of the glyph.
2196 	 */
2197 	PangoGlyphVisAttr attr;
2198 }
2199 
2200 struct PangoGlyphItem
2201 {
2202 	/**
2203 	 * corresponding `PangoItem`
2204 	 */
2205 	PangoItem* item;
2206 	/**
2207 	 * corresponding `PangoGlyphString`
2208 	 */
2209 	PangoGlyphString* glyphs;
2210 	/**
2211 	 * shift of the baseline, relative to the baseline
2212 	 * of the containing line. Positive values shift upwards
2213 	 */
2214 	int yOffset;
2215 	/**
2216 	 * horizontal displacement to apply before the
2217 	 * glyph item. Positive values shift right
2218 	 */
2219 	int startXOffset;
2220 	/**
2221 	 * horizontal displacement to apply after th
2222 	 * glyph item. Positive values shift right
2223 	 */
2224 	int endXOffset;
2225 }
2226 
2227 struct PangoGlyphItemIter
2228 {
2229 	PangoGlyphItem* glyphItem;
2230 	const(char)* text;
2231 	int startGlyph;
2232 	int startIndex;
2233 	int startChar;
2234 	int endGlyph;
2235 	int endIndex;
2236 	int endChar;
2237 }
2238 
2239 struct PangoGlyphString
2240 {
2241 	/**
2242 	 * number of glyphs in this glyph string
2243 	 */
2244 	int numGlyphs;
2245 	/**
2246 	 * array of glyph information
2247 	 */
2248 	PangoGlyphInfo* glyphs;
2249 	/**
2250 	 * logical cluster info, indexed by the byte index
2251 	 * within the text corresponding to the glyph string
2252 	 */
2253 	int* logClusters;
2254 	int space;
2255 }
2256 
2257 /**
2258  * A `PangoGlyphVisAttr` structure communicates information between
2259  * the shaping and rendering phases.
2260  *
2261  * Currently, it contains cluster start and color information.
2262  * More attributes may be added in the future.
2263  *
2264  * Clusters are stored in visual order, within the cluster, glyphs
2265  * are always ordered in logical order, since visual order is meaningless;
2266  * that is, in Arabic text, accent glyphs follow the glyphs for the
2267  * base character.
2268  */
2269 struct PangoGlyphVisAttr
2270 {
2271 	import std.bitmanip: bitfields;
2272 	mixin(bitfields!(
2273 		uint, "isClusterStart", 1,
2274 		uint, "isColor", 1,
2275 		uint, "", 30
2276 	));
2277 }
2278 
2279 struct PangoItem
2280 {
2281 	/**
2282 	 * byte offset of the start of this item in text.
2283 	 */
2284 	int offset;
2285 	/**
2286 	 * length of this item in bytes.
2287 	 */
2288 	int length;
2289 	/**
2290 	 * number of Unicode characters in the item.
2291 	 */
2292 	int numChars;
2293 	/**
2294 	 * analysis results for the item.
2295 	 */
2296 	PangoAnalysis analysis;
2297 }
2298 
2299 struct PangoLanguage;
2300 
2301 struct PangoLayout;
2302 
2303 struct PangoLayoutClass;
2304 
2305 struct PangoLayoutIter;
2306 
2307 struct PangoLayoutLine
2308 {
2309 	/**
2310 	 * the layout this line belongs to, might be %NULL
2311 	 */
2312 	PangoLayout* layout;
2313 	/**
2314 	 * start of line as byte index into layout->text
2315 	 */
2316 	int startIndex;
2317 	/**
2318 	 * length of line in bytes
2319 	 */
2320 	int length;
2321 	/**
2322 	 * list of runs in the
2323 	 * line, from left to right
2324 	 */
2325 	GSList* runs;
2326 	import std.bitmanip: bitfields;
2327 	mixin(bitfields!(
2328 		uint, "isParagraphStart", 1,
2329 		uint, "resolvedDir", 3,
2330 		uint, "", 28
2331 	));
2332 }
2333 
2334 /**
2335  * The `PangoLogAttr` structure stores information about the attributes of a
2336  * single character.
2337  */
2338 struct PangoLogAttr
2339 {
2340 	import std.bitmanip: bitfields;
2341 	mixin(bitfields!(
2342 		uint, "isLineBreak", 1,
2343 		uint, "isMandatoryBreak", 1,
2344 		uint, "isCharBreak", 1,
2345 		uint, "isWhite", 1,
2346 		uint, "isCursorPosition", 1,
2347 		uint, "isWordStart", 1,
2348 		uint, "isWordEnd", 1,
2349 		uint, "isSentenceBoundary", 1,
2350 		uint, "isSentenceStart", 1,
2351 		uint, "isSentenceEnd", 1,
2352 		uint, "backspaceDeletesCharacter", 1,
2353 		uint, "isExpandableSpace", 1,
2354 		uint, "isWordBoundary", 1,
2355 		uint, "breakInsertsHyphen", 1,
2356 		uint, "breakRemovesPreceding", 1,
2357 		uint, "reserved", 17
2358 	));
2359 }
2360 
2361 struct PangoMatrix
2362 {
2363 	/**
2364 	 * 1st component of the transformation matrix
2365 	 */
2366 	double xx;
2367 	/**
2368 	 * 2nd component of the transformation matrix
2369 	 */
2370 	double xy;
2371 	/**
2372 	 * 3rd component of the transformation matrix
2373 	 */
2374 	double yx;
2375 	/**
2376 	 * 4th component of the transformation matrix
2377 	 */
2378 	double yy;
2379 	/**
2380 	 * x translation
2381 	 */
2382 	double x0;
2383 	/**
2384 	 * y translation
2385 	 */
2386 	double y0;
2387 }
2388 
2389 /**
2390  * The `PangoRectangle` structure represents a rectangle.
2391  *
2392  * `PangoRectangle` is frequently used to represent the logical or ink
2393  * extents of a single glyph or section of text. (See, for instance,
2394  * [method@Pango.Font.get_glyph_extents].)
2395  */
2396 struct PangoRectangle
2397 {
2398 	/**
2399 	 * X coordinate of the left side of the rectangle.
2400 	 */
2401 	int x;
2402 	/**
2403 	 * Y coordinate of the the top side of the rectangle.
2404 	 */
2405 	int y;
2406 	/**
2407 	 * width of the rectangle.
2408 	 */
2409 	int width;
2410 	/**
2411 	 * height of the rectangle.
2412 	 */
2413 	int height;
2414 }
2415 
2416 struct PangoRenderer
2417 {
2418 	GObject parentInstance;
2419 	PangoUnderline underline;
2420 	bool strikethrough;
2421 	int activeCount;
2422 	/**
2423 	 * the current transformation matrix for
2424 	 * the Renderer; may be %NULL, which should be treated the
2425 	 * same as the identity matrix.
2426 	 */
2427 	PangoMatrix* matrix;
2428 	PangoRendererPrivate* priv;
2429 }
2430 
2431 /**
2432  * Class structure for `PangoRenderer`.
2433  *
2434  * The following vfuncs take user space coordinates in Pango units
2435  * and have default implementations:
2436  * - draw_glyphs
2437  * - draw_rectangle
2438  * - draw_error_underline
2439  * - draw_shape
2440  * - draw_glyph_item
2441  *
2442  * The default draw_shape implementation draws nothing.
2443  *
2444  * The following vfuncs take device space coordinates as doubles
2445  * and must be implemented:
2446  * - draw_trapezoid
2447  * - draw_glyph
2448  *
2449  * Since: 1.8
2450  */
2451 struct PangoRendererClass
2452 {
2453 	GObjectClass parentClass;
2454 	/** */
2455 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyphString* glyphs, int x, int y) drawGlyphs;
2456 	/** */
2457 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, int x, int y, int width, int height) drawRectangle;
2458 	/** */
2459 	extern(C) void function(PangoRenderer* renderer, int x, int y, int width, int height) drawErrorUnderline;
2460 	/** */
2461 	extern(C) void function(PangoRenderer* renderer, PangoAttrShape* attr, int x, int y) drawShape;
2462 	/** */
2463 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, double y1, double x11, double x21, double y2, double x12, double x22) drawTrapezoid;
2464 	/** */
2465 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyph glyph, double x, double y) drawGlyph;
2466 	/** */
2467 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part) partChanged;
2468 	/** */
2469 	extern(C) void function(PangoRenderer* renderer) begin;
2470 	/** */
2471 	extern(C) void function(PangoRenderer* renderer) end;
2472 	/** */
2473 	extern(C) void function(PangoRenderer* renderer, PangoLayoutRun* run) prepareRun;
2474 	/** */
2475 	extern(C) void function(PangoRenderer* renderer, const(char)* text, PangoGlyphItem* glyphItem, int x, int y) drawGlyphItem;
2476 	/** */
2477 	extern(C) void function() PangoReserved2;
2478 	/** */
2479 	extern(C) void function() PangoReserved3;
2480 	/** */
2481 	extern(C) void function() PangoReserved4;
2482 }
2483 
2484 struct PangoRendererPrivate;
2485 
2486 struct PangoScriptIter;
2487 
2488 struct PangoTabArray;
2489 
2490 struct PangoCairoFontMap;
2491 
2492 /**
2493  * Type of a function that can duplicate user data for an attribute.
2494  *
2495  * Params:
2496  *     userData = user data to copy
2497  *
2498  * Returns: new copy of @user_data.
2499  */
2500 public alias extern(C) void* function(void* userData) PangoAttrDataCopyFunc;
2501 
2502 /**
2503  * Type of a function filtering a list of attributes.
2504  *
2505  * Params:
2506  *     attribute = a Pango attribute
2507  *     userData = user data passed to the function
2508  *
2509  * Returns: %TRUE if the attribute should be selected for
2510  *     filtering, %FALSE otherwise.
2511  */
2512 public alias extern(C) int function(PangoAttribute* attribute, void* userData) PangoAttrFilterFunc;
2513 
2514 /**
2515  * Callback used when enumerating fonts in a fontset.
2516  *
2517  * See [method@Pango.Fontset.foreach].
2518  *
2519  * Params:
2520  *     fontset = a `PangoFontset`
2521  *     font = a font from @fontset
2522  *     userData = callback data
2523  *
2524  * Returns: if %TRUE, stop iteration and return immediately.
2525  *
2526  * Since: 1.4
2527  */
2528 public alias extern(C) int function(PangoFontset* fontset, PangoFont* font, void* userData) PangoFontsetForeachFunc;
2529 
2530 /**
2531  * Function type for rendering attributes of type %PANGO_ATTR_SHAPE
2532  * with Pango's Cairo renderer.
2533  *
2534  * Params:
2535  *     cr = a Cairo context with current point set to where the shape should
2536  *         be rendered
2537  *     attr = the %PANGO_ATTR_SHAPE to render
2538  *     doPath = whether only the shape path should be appended to current
2539  *         path of @cr and no filling/stroking done.  This will be set
2540  *         to %TRUE when called from pango_cairo_layout_path() and
2541  *         pango_cairo_layout_line_path() rendering functions.
2542  *     data = user data passed to pango_cairo_context_set_shape_renderer()
2543  */
2544 public alias extern(C) void function(cairo_t* cr, PangoAttrShape* attr, int doPath, void* data) PangoCairoShapeRendererFunc;
2545 
2546 enum PANGO_SCALE_XX_SMALL = 0.5787037037037;  /// The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
2547 enum PANGO_SCALE_X_SMALL  = 0.6444444444444;  /// The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
2548 enum PANGO_SCALE_SMALL    = 0.8333333333333;  /// The scale factor for one shrinking step (1 / 1.2).
2549 enum PANGO_SCALE_MEDIUM   = 1.0;              /// The scale factor for normal size (1.0).
2550 enum PANGO_SCALE_LARGE    = 1.2;              /// The scale factor for one magnification step (1.2)
2551 enum PANGO_SCALE_X_LARGE  = 1.4399999999999;  /// The scale factor for two magnification steps (1.2 * 1.2).
2552 enum PANGO_SCALE_XX_LARGE = 1.728;            /// The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
2553 
2554 
2555 /**
2556  * Whether the segment should be shifted to center around the baseline.
2557  *
2558  * This is mainly used in vertical writing directions.
2559  */
2560 enum ANALYSIS_FLAG_CENTERED_BASELINE = 1;
2561 alias PANGO_ANALYSIS_FLAG_CENTERED_BASELINE = ANALYSIS_FLAG_CENTERED_BASELINE;
2562 
2563 /**
2564  * Whether this run holds ellipsized text.
2565  */
2566 enum ANALYSIS_FLAG_IS_ELLIPSIS = 2;
2567 alias PANGO_ANALYSIS_FLAG_IS_ELLIPSIS = ANALYSIS_FLAG_IS_ELLIPSIS;
2568 
2569 /**
2570  * Whether to add a hyphen at the end of the run during shaping.
2571  */
2572 enum ANALYSIS_FLAG_NEED_HYPHEN = 4;
2573 alias PANGO_ANALYSIS_FLAG_NEED_HYPHEN = ANALYSIS_FLAG_NEED_HYPHEN;
2574 
2575 /**
2576  * Value for @start_index in `PangoAttribute` that indicates
2577  * the beginning of the text.
2578  */
2579 enum ATTR_INDEX_FROM_TEXT_BEGINNING = 0;
2580 alias PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING = ATTR_INDEX_FROM_TEXT_BEGINNING;
2581 
2582 /**
2583  * Value for @end_index in `PangoAttribute` that indicates
2584  * the end of the text.
2585  */
2586 enum ATTR_INDEX_TO_TEXT_END = 4294967295;
2587 alias PANGO_ATTR_INDEX_TO_TEXT_END = ATTR_INDEX_TO_TEXT_END;
2588 
2589 /**
2590  * A `PangoGlyph` value that indicates a zero-width empty glpyh.
2591  *
2592  * This is useful for example in shaper modules, to use as the glyph for
2593  * various zero-width Unicode characters (those passing [func@is_zero_width]).
2594  */
2595 enum GLYPH_EMPTY = 268435455;
2596 alias PANGO_GLYPH_EMPTY = GLYPH_EMPTY;
2597 
2598 /**
2599  * A `PangoGlyph` value for invalid input.
2600  *
2601  * `PangoLayout` produces one such glyph per invalid input UTF-8 byte and such
2602  * a glyph is rendered as a crossed box.
2603  *
2604  * Note that this value is defined such that it has the %PANGO_GLYPH_UNKNOWN_FLAG
2605  * set.
2606  */
2607 enum GLYPH_INVALID_INPUT = 4294967295;
2608 alias PANGO_GLYPH_INVALID_INPUT = GLYPH_INVALID_INPUT;
2609 
2610 /**
2611  * Flag used in `PangoGlyph` to turn a `gunichar` value of a valid Unicode
2612  * character into an unknown-character glyph for that `gunichar`.
2613  *
2614  * Such unknown-character glyphs may be rendered as a 'hex box'.
2615  */
2616 enum GLYPH_UNKNOWN_FLAG = 268435456;
2617 alias PANGO_GLYPH_UNKNOWN_FLAG = GLYPH_UNKNOWN_FLAG;
2618 
2619 /**
2620  * The scale between dimensions used for Pango distances and device units.
2621  *
2622  * The definition of device units is dependent on the output device; it will
2623  * typically be pixels for a screen, and points for a printer. %PANGO_SCALE is
2624  * currently 1024, but this may be changed in the future.
2625  *
2626  * When setting font sizes, device units are always considered to be
2627  * points (as in "12 point font"), rather than pixels.
2628  */
2629 enum SCALE = 1024;
2630 alias PANGO_SCALE = SCALE;
2631 
2632 /**
2633  * The major component of the version of Pango available at compile-time.
2634  */
2635 enum VERSION_MAJOR = 1;
2636 alias PANGO_VERSION_MAJOR = VERSION_MAJOR;
2637 
2638 /**
2639  * The micro component of the version of Pango available at compile-time.
2640  */
2641 enum VERSION_MICRO = 7;
2642 alias PANGO_VERSION_MICRO = VERSION_MICRO;
2643 
2644 /**
2645  * The minor component of the version of Pango available at compile-time.
2646  */
2647 enum VERSION_MINOR = 50;
2648 alias PANGO_VERSION_MINOR = VERSION_MINOR;
2649 
2650 /**
2651  * A string literal containing the version of Pango available at compile-time.
2652  */
2653 enum VERSION_STRING = "1.50.7";
2654 alias PANGO_VERSION_STRING = VERSION_STRING;